'''
1、本节课学习GPIO的中断，还是使用按键来操作
2、本节课需要使能GPIO的输入模式，即按键的信号需要输入给ESP32
3、在使用GPIO的中断模式进行按键操作时，推荐使用硬件消抖，而不是软件消抖

消抖的方法：
一般有硬件消抖和软件消抖两种办法
1、硬件消抖
   一般采用RC电路实现，这里我们只要知道有这个方法就可以了。
2、软件消抖
   在使用GPIO 中断进行按键操作时，推荐使用硬件消抖
'''

'''

按键使用的GPIO：D2
LED 使用的GPIO：D5

按一下按键，LED点亮，再按一下按键，LED熄灭

'''

#导入Pin模块
from machine import Pin
import time

#定义按键控制对象
key = Pin(2, Pin.IN)
led = Pin(5, Pin.OUT)

led_state = False

# 在中断函数中，要做到快进快出，即只做必要的操作，不要在中断函数中进行延时操作
# 或进行过多的语句操作
# 1、在中断函数内，不使用延时函数或者耗时长的等待
# 2、在中断函数内，最好不超过10条语句
def key_irq(key):
    global led_state
    
    led_state = not led_state
    led.value(led_state)

#程序入口
if __name__=="__main__":
    led.value(0)  #初始化LED，熄灭状态
    key.irq(handler=key_irq, trigger=Pin.IRQ_RISING)
    
    while True:
        pass
    